package funcs

import (
	"github.com/Unknwon/goconfig"
	log "github.com/YoungPioneers/blog4go"
	"os"
	"strconv"
	"strings"
)

/**
加载godenycc配置文件

*/
//读取配置文件，并返回需要的key
//white_ip_list,concurrency_limit_int,black_ip_list,block_time_int,ipset_black_list_name,sleep_time_int
func LoadDenyccConfig(configFileName string) (string, int, string, int, string, int) {

	//通过goconfig加载godenycc的配置文件
	//加载配置文件，默认加载当前文件路径下的config.ini文件
	//configFileName := "./godenycc_config.ini"
	cfg, err := goconfig.LoadConfigFile(configFileName)
	if err != nil {
		log.Error("读取配置文件失败[godenycc_config.ini]")
		os.Exit(1)
	}
	log.Info("读取到配置文件：", configFileName)

	//------------------------------------------------------------------------------------

	//	2.1)忽略的IP地址列表,即白名单
	white_ip_list := strings.TrimSpace(LoadConfigDefault("WHITE_IP_LIST", cfg))
	log.Info("白名单文件为：", white_ip_list)

	//2.2)并发限制数
	concurrency_limit := strings.TrimSpace(LoadConfigDefault("CONCURRENCY_LIST", cfg))
	log.Info("并发限制为：", concurrency_limit)
	concurrency_limit_int, err := strconv.Atoi(concurrency_limit)
	if err != nil {
		log.Error("并发连接数设置可能非数字")
	}

	//2.3)已经阻止的IP列表，黑名单
	black_ip_list := strings.TrimSpace(LoadConfigDefault("BLACK_IP_LIST", cfg))
	log.Info("黑名单文件为：", black_ip_list)

	//	2.4)拉黑时长
	block_time := strings.TrimSpace(LoadConfigDefault("BLOCK_TIME", cfg))
	log.Info("拉黑时长为：", block_time)
	block_time_int, err := strconv.Atoi(block_time)
	if err != nil {
		log.Error("拉黑时长设置可能非数字")
	}

	//	2.5) ipset 中的名称是什么
	ipset_black_list_name := strings.TrimSpace(LoadConfigDefault("IPSET_BLACK_LIST_NAME", cfg))
	log.Info("IPSET LIST NAME IS：", ipset_black_list_name)

	//	2.6）检查频率是多少，单位秒----------------,这个暂时没有想好怎么弄，先放着不用吧
	sleep_time := strings.TrimSpace(LoadConfigDefault("SLEEP_TIME", cfg))
	sleep_time_int, err := strconv.Atoi(sleep_time)
	if err != nil {
		log.Error("拉黑时长设置可能非数字")
	}

	return white_ip_list, concurrency_limit_int, black_ip_list, block_time_int, ipset_black_list_name, sleep_time_int
}

func LoadConfigDefault(key string, cfg *goconfig.ConfigFile) string {

	str, err := cfg.GetValue("DEFAULT", key)
	if err != nil {
		log.Error("配置文件中没有找到该项：", key)
		os.Exit(1)
	}
	return str

}
